<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CAPTCHA Helper : CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 2.1.0</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
CAPTCHA Helper
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter-kr.org/user_guide_2.1.0/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">


  <h1>CAPTCHA 헬퍼</h1>

  <p> CAPTCHA 헬퍼는 CAPTCHA 이미지를 만드는 데 유용한 함수로 구성되어 있습니다.</p>


  <h2>헬퍼 로딩 </h2>

  <p>다음 코드를 사용하여로드합니다:</p>
  <code>$this->load->helper('captcha');</code>
  <p>다음 함수를 사용할 수 있습니다:</p>

<h2>create_captcha(<var>$data</var>)</h2>

  <p>CAPTCHA 생성을 위한 정보를 배열로 받아서 지정한곳에 이미지를 생성한 후 이미지에 대한 정보를 연관배열로반환합니다.</p>

<code>[array]<br />
(<br />
&nbsp;&nbsp;'image' => IMAGE TAG<br />
&nbsp;&nbsp;'time'	=> TIMESTAMP (in microtime)<br />
&nbsp;&nbsp;'word'	=> CAPTCHA WORD<br />
  )</code>
  <p>&quot;image&quot;는 실제 image 태그입니다 : <code>&lt;img src=&quot;http://example.com/captcha/12345.jpg&quot;
    width=&quot;140&quot; height=&quot;50&quot; /&gt;</code></p>


  <p>&quot;time"은 파일이름으로 사용할 마이크로 타임스탬프 입니다. 다음과 같은 숫자가 될것입니다: 1139612155.3422</p>


  <p>"word" 는 이미지에 표시될 문자입니다.지정하지않으면 랜덤한 문자열이 사용됩니다.</p>


  <h3> CAPTCHA 헬퍼 사용하기</h3>


  <p>일단 헬퍼를 로드한후 아래와같이 CAPTCHA를 생성할 수 있습니다:</p>

<code>$vals = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;'word'		 => 'Random word',<br />
&nbsp;&nbsp;&nbsp;&nbsp;'img_path'	 => './captcha/',<br />
&nbsp;&nbsp;&nbsp;&nbsp;'img_url'	 => 'http://example.com/captcha/',<br />
&nbsp;&nbsp;&nbsp;&nbsp;'font_path'	 => './path/to/fonts/texb.ttf',<br />
&nbsp;&nbsp;&nbsp;&nbsp;'img_width'	 => '150',<br />
&nbsp;&nbsp;&nbsp;&nbsp;'img_height' => 30,<br />
&nbsp;&nbsp;&nbsp;&nbsp;'expiration' => 7200<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
<br />
$cap = create_captcha($vals);<br />
  echo $cap['image'];</code>
  <ul>
    <li>captcha 함수는 GD 이미지 라이브러리를 필요로합니다..</li>
    <li>img_path과 img_url은 필수입니다.</li>
    <li>&quot;word&quot;를 지정하지 않으면 임의의 ASCII 문자열이 생성됩니다. 여러분의 워드 라이브러리를 함께 사용해도
      좋습니다.</li>
    <li>트루타입 글꼴 경로가 지정되지 않으면 표준보기 흉한 GD 글꼴이 사용됩니다.</li>
    <li>&quot;captcha&quot;디렉토리는 쓰기 가능해야합니다. (666 또는 777)</li>
    <li>&quot;expiration&quot;(단위 : 초) captcha가 삭제될 때까지 시간입니다. 기본적으로 2 시간입니다.</li>
  </ul>


  <h3>데이터베이스 추가</h3>


  <p>CAPTCHA를 이용해 사용자의 폼전송을 막으려면 <kbd>create_captcha()</kbd> 함수가 반환하는 정보를 디비에
    저장할 필요가 있습니다.그 정보를 이용하여 사용자의 폼전송이 적합성 및 만료 여부를 확인할 수 있습니다.</p>
  <p>테이블 형태:</p>

<code>CREATE TABLE captcha (<br />
&nbsp;captcha_id bigint(13) unsigned NOT NULL auto_increment,<br />
&nbsp;captcha_time int(10) unsigned NOT NULL,<br />
&nbsp;ip_address varchar(16) default '0' NOT NULL,<br />
&nbsp;word varchar(20) NOT NULL,<br />
&nbsp;PRIMARY KEY `captcha_id` (`captcha_id`),<br />
&nbsp;KEY `word` (`word`)<br />
);</code>


  <p>디비와 함께 사용하는 예제입니다. CAPTCHA를 사용하는 페이지에서는 아래 비스무리한 코드를 구현합니다:</p>

<code>$this-&gt;load-&gt;helper(&#x27;captcha&#x27;);<br />
$vals = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#x27;img_path&#x27;	 =&gt; &#x27;./captcha/&#x27;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#x27;img_url&#x27;	 =&gt; &#x27;http://example.com/captcha/&#x27;<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
<br />
$cap = create_captcha($vals);<br />
<br />
$data = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#x27;captcha_time&#x27;	=&gt; $cap[&#x27;time&#x27;],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#x27;ip_address&#x27;	=&gt; $this-&gt;input-&gt;ip_address(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#x27;word&#x27;			=&gt; $cap[&#x27;word&#x27;]<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
<br />
$query = $this-&gt;db-&gt;insert_string(&#x27;captcha&#x27;, $data);<br />
$this-&gt;db-&gt;query($query);<br />
<br />
echo &#x27;Submit the word you see below:&#x27;;<br />
echo $cap[&#x27;image&#x27;];<br />
echo &#x27;&lt;input type=&quot;text&quot; name=&quot;captcha&quot; value=&quot;&quot; /&gt;&#x27;;</code>


  <p>폼 전송을 받는 페이지에서는 아래 비스무리한 코드를 구현합니다:</p>

<code>// First, delete old captchas<br />
$expiration = time()-7200; // Two hour limit<br />
$this-&gt;db-&gt;query(&quot;DELETE FROM captcha WHERE captcha_time &lt; &quot;.$expiration);	<br />
<br />
// Then see if a captcha exists:<br />
$sql = &quot;SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time &gt; ?&quot;;<br />
$binds = array($_POST[&#x27;captcha&#x27;], $this-&gt;input-&gt;ip_address(), $expiration);<br />
$query = $this-&gt;db-&gt;query($sql, $binds);<br />
$row = $query-&gt;row();<br />
<br />
if ($row-&gt;count == 0)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;You must submit the word that appears in the image&quot;;<br />
}</code>

</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="array_helper.html">Array Helper</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="cookie_helper.html">Cookie Helper</a></p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>

</body>
</html>
